# 学习列表相关操作：
print("""
----------------------------------------
（1）list.append(object)
  Append object to the end of the list.
  在列表末尾追加新元素。
----------------------------------------
""")
lst1 = ["中国", "共产党", "即将", "召开"]
e = "第二十次全国代表大会"
print("lst1=", lst1)
lst1.append(e)
print("lst1.append=", lst1)

print("""
----------------------------------------
（2）list.clear()
  Remove all items from list.
  清空列表元素。
----------------------------------------
""")
lst2 = ["中国", "共产党", "即将", "召开"]
print("lst2=", lst2)
lst2.clear()
print("lst2.clear=", lst2)

print("""
----------------------------------------
（3）list.copy()
  Return a shallow copy of the list.
  返回一个复制的列表。（浅拷贝）
----------------------------------------
""")
lst3 = ["中国", "共产党", "即将", "召开"]
print("lst3=", lst3)
lst3Copy = lst3.copy()
print("lst3.copy=", lst3Copy)
print(lst3 == lst3Copy) # 判断变量的值是否相等
print(lst3 is lst3Copy) # 判断变量的id是否相等

print("""
----------------------------------------
（4）list.count(value)
  Return number of occurrences of value.
  统计value出现的次数。
----------------------------------------
""")
lst4 = ["中国", "共产党", "即将", "召开", "中国"]
print("lst4=", lst4)
lst4Count = lst4.count("中国")
print("lst4.count=", lst4Count)
print(lst4.count("党"))

print("""
----------------------------------------
（5）list.extend(iterable)
  Extend list by appending elements from the iterable.
  将可迭代对象的元素追加到原列表后
----------------------------------------
""")
lst5 = ["中国", "共产党", "即将", "召开"]
print("lst5=", lst5)
lst5e = ["第", "二十次", "全国", "代表", "大会"]
print("lst5e=", lst5e)
lst5Extend = lst5.extend(lst5e)
print("lst5.extend=", lst5Extend, "#list.extend(iter)返回值是None，是在list里面追加") 
print("lst5=", lst5)

print("""
----------------------------------------
（6）list.index(value, start=0, stop=9223372036854775807)
  Return first index of value.
  Raises ValueError if the value is not present.
  返回value值的第一个索引
  start指定从开始索引，默认从0开始
  不存在指定的值抛出异常（异常可以理解为出错，并给出出错提示，程序从出错位置结束运行）
----------------------------------------
""")
lst6 = lst5
print("lst6=", lst6)
lst6Index = lst6.index("全国")
print("lst6.index=", lst6Index)
print("从索引4开始查找：", lst6.index("全国",4))
#print("从索引7开始查找：", lst6.index("全国",7)) # 找不到抛出异常
#print(lst6.index("全国人民")) # 找不到抛出异常

print("""
----------------------------------------
（7）list.insert(index, object)
  Insert object before index.
  在指定索引前插入元素
----------------------------------------
""")
lst7 = [1,4,6]
print("lst7=",lst7)
lst7.insert(1,3)
print("lst7.insert(1,3)=",lst7)

print("""
----------------------------------------
（8）list.pop(index=-1)
  Remove and return item at index (default last).
  Raises IndexError if list is empty or index is out of range.
  删除指定索引的元素，默认删除最后一个元素
  如果列表为空，或指定索引不在列表范围内，抛出IndexError异常
  补充：计算可迭代对象的长度，即元素总个数。字符串、列表、字典、集合都是可迭代对象。
    len(iterable)
----------------------------------------
""")
lst8 = [1,2,3,4,5,6,7,8,9,10]
print("lst8=",lst8)
val = lst8.pop() # 默认最后一个
print("删除最后一个元素，值val=", val)
print("删除val后的lst8=",lst8)
val = lst8.pop(0) # 删除第一个
print("删除第一个元素，值val=", val)
print("删除val后的lst8=",lst8)
#val = lst8.pop(10) # index超出范围，异常
lst8Len = len(lst8) # 返回可迭代对象的长度，包括字符串、列表、字典等
print("len(lst8)=", lst8Len)

print("""
----------------------------------------
（9）list.remove(value)
  Remove first occurrence of value.
  Raises ValueError if the value is not present.
  移除匹配value的第一个元素
  value不存在抛出异常ValueError
----------------------------------------
""")
lst9 = [1,2,3,4,3,5]
print("lst9=",lst9)
lst9.remove(3)
print("lst9.remove(3)=",lst9)
#lst9.remove(7) # 异常

print("""
----------------------------------------
（10）list.reverse()
  Reverse *IN PLACE*.
  将列表反序，注意：并非排序
----------------------------------------
""")
lst10 = [3,8,9,1,40,32,36,6,101,23]
print("lst10=",lst10)
lst10.reverse()
print("lst10.reverse()=",lst10)

print("""
----------------------------------------
（11）list.sort(key=None, reverse=False)
  Sort the list in ascending order and return None.
  The sort is in-place (i.e. the list itself is modified) and stable (i.e. the
  order of two equal elements is maintained).
  If a key function is given, apply it once to each list item and sort them,
  ascending or descending, according to their function values.
  The reverse flag can be set to sort in descending order.
  key：指定带有一个参数的函数，应用于列表中的每一个元素，按求值之后的大小，对原列表进行排序。
       默认值 None 表示直接对列表项排序。
  reverse：一个布尔值。如果设为 True，则每个列表元素将按反向顺序比较进行排序。
  注意：列表元素数据类型不一致时可能会报错。
----------------------------------------
""")
lst11 = [3,8,9,1,40,32,36,6,101,23]
print("lst11=",lst11)
lst11.sort()
print("默认升序，lst11.sort()=",lst11)
lst11.sort(reverse=True)
print("指定降序，lst11.sort(reverse=True)=",lst11)
# 指定排序函数key
citys = ["Xi'an", "BeiJing", "ChengDu", "ShangHai", "GuangZhou"]
print("citys=",citys)
citys.sort()
print("citys.sort()=",citys)
citys.sort(key=lambda val:len(val)) # 指定key，按照城市字符串长度排序
print("citys.sort(key=lambda val:len(val))=",citys)

print("""
----------------------------------------
（12）列表切片
list[start:end:step]
  切片不改变原列表，将生成新列表
形式对比：range(start,end,step)
----------------------------------------
""")
lst12 = [1,2,5,8,4,7,6,12,10,9,3,11,0]
lst12.sort()
print("lst12=",lst12)
print("复制新列表：", lst12[:]) # lst12[::]也可以
print("索引0至索引9：", lst12[:9]) # start=0,end=9
print("索引2至-1：", lst12[2:-1]) # start=2,end=-1
print("索引2至含尾：", lst12[2:]) # start=2,含尾
print("index: [2,9)",lst12[2:9]) # start至end
print("index: [2,9)",lst12[2:9:-1]) # step=-1，反向，为什么为空？
print("index: [8,1)",lst12[8:1:-1])
print("index: [-5,1)",lst12[-5:1:-1])
print("index: [-5,1)",lst12[-5:1:-2]) # 反向，每两个取一个
print("-----range示例------")
print("生成[0, 12）的列表：", list(range(12)))
print("生成[3, 10）的列表：", list(range(3, 10)))
print("生成[3, -10）的列表：", list(range(3, -10, -1)))
print("生成[3, -10），每两个数取一个数的列表：", list(range(3, -10, -2)))

print("""
----------------------------------------
（13）遍历列表各元素，输出index和value
----------------------------------------
""")
print("-----------方法一------------")
lst13 = ["中国", "共产党", "即将", "召开", "第", "二十次", "全国", "代表", "大会"]
for index in range(len(lst13)):
  print("列表lst13的index和value分别为：", index, lst13[index])

print("-----------方法二------------")
index_ = 0
for value in lst13:
  print("列表lst13的index和value分别为：", index_, lst13[index_])
  index_ += 1

print("-----------方法三------------")
index_ = 0
while index_ < len(lst13):
  print("列表lst13的index和value分别为：", index_, lst13[index_])
  index_ += 1

print("""
----------------------------------------
（14）列表元素是字符串，拼接成语句
----------------------------------------
""")
# 遍历列表元素，用"+"将字符串拼接起来
lst14 = ["中国", "共产党", "即将", "召开", "第", "二十次", "全国", "代表", "大会"]
strAdd = "" # 初始化最终字符串
for val in lst14:
  strAdd += val
print("循环加拼接：",strAdd)

# 用字符串连接列表元素的方法: str.join(sequense)
print("str.join(seq)=", "".join(lst14))
#print("连接非字符串", "*".join([1,3,4,'a','b',9,'中文'])) # 报错，sequense里元素必须是字符串

